package com.education.ai.dao;

import com.education.ai.entity.MediaResource;

import java.util.List;
import java.util.Optional;

/**
 * 媒体资源数据访问接口
 */
public interface MediaResourceDao {
    
    /**
     * 查询所有媒体资源
     */
    List<MediaResource> findAll();
    
    /**
     * 根据ID查询媒体资源
     */
    Optional<MediaResource> findById(Long id);
    
    /**
     * 根据学科查询媒体资源
     */
    List<MediaResource> findBySubject(String subject);
    
    /**
     * 根据年级查询媒体资源
     */
    List<MediaResource> findByGrade(String grade);
    
    /**
     * 根据教学主题查询媒体资源
     */
    List<MediaResource> findByTopic(String topic);
    
    /**
     * 根据资源类型查询媒体资源
     */
    List<MediaResource> findByResourceType(String resourceType);
    
    /**
     * 根据标题关键词查询媒体资源
     */
    List<MediaResource> findByTitleContaining(String keyword);
    
    /**
     * 根据资源格式查询媒体资源
     */
    List<MediaResource> findByFormat(String format);
    
    /**
     * 根据教师ID查询媒体资源
     */
    List<MediaResource> findByTeacherId(String teacherId);
    
    /**
     * 根据学科和年级查询媒体资源
     */
    List<MediaResource> findBySubjectAndGrade(String subject, String grade);
    
    /**
     * 根据学科、年级和主题查询媒体资源
     */
    List<MediaResource> findBySubjectAndGradeAndTopic(String subject, String grade, String topic);
    
    /**
     * 分页查询媒体资源
     */
    List<MediaResource> findWithPagination(int offset, int limit);
    
    /**
     * 保存媒体资源
     */
    MediaResource save(MediaResource mediaResource);
    
    /**
     * 更新媒体资源
     */
    boolean update(MediaResource mediaResource);
    
    /**
     * 删除媒体资源
     */
    boolean deleteById(Long id);
    
    /**
     * 查询媒体资源总数
     */
    long count();
    
    /**
     * 根据学科查询媒体资源总数
     */
    long countBySubject(String subject);
    
    /**
     * 根据资源类型查询媒体资源总数
     */
    long countByResourceType(String resourceType);
} 